home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mac-Source 1994 July
/
Mac-Source_July_1994.iso
/
C and C++
/
Miscellaneous
/
gdbm
/
systems.h
< prev
next >
Wrap
Text File
|
1992-12-16
|
4KB
|
158 lines
/* systems.h - Most of the system dependant code and defines are here. */
/* This file is part of GDBM, the GNU data base manager, by Philip A. Nelson.
Copyright (C) 1990, 1991 Free Software Foundation, Inc.
GDBM is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 1, or (at your option)
any later version.
GDBM is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GDBM; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
You may contact the author by:
e-mail: phil@wwu.edu
us-mail: Philip A. Nelson
Computer Science Department
Western Washington University
Bellingham, WA 98226
phone: (206) 676-3035
*************************************************************************/
#ifdef macintosh
#define OPEN(a,b,c) open(a,b)
#define L_SET SEEK_SET
#include <memory.h>
#define bcmp(d1, d2, n) memcmp(d1, d2, n)
#define bcopy(d1, d2, n) memcpy(d2, d1, n)
#define fsync(f) 0
#define flock(a,b) 0
#endif
/* System V changes and defines. */
/**************************************************/
#ifdef SYSV
/* File seeking needs L_SET defined .*/
#include <unistd.h>
#define L_SET SEEK_SET
/* Some files need fcntl.h for locking. */
#include <fcntl.h>
#define UNLOCK_FILE(dbf) \
{ \
struct flock flock; \
flock.l_type = F_UNLCK; \
flock.l_whence = 0; \
flock.l_start = flock.l_len = 0L; \
fcntl (dbf->desc, F_SETLK, &flock); \
}
#define READLOCK_FILE(dbf) \
{ \
struct flock flock; \
flock.l_type = F_RDLCK; \
flock.l_whence = 0; \
flock.l_start = flock.l_len = 0L; \
lock_val = fcntl (dbf->desc, F_SETLK, &flock); \
}
#define WRITELOCK_FILE(dbf) \
{ \
struct flock flock; \
flock.l_type = F_WRLCK; \
flock.l_whence = 0; \
flock.l_start = flock.l_len = 0L; \
lock_val = fcntl (dbf->desc, F_SETLK, &flock); \
}
/* Send bcmp to the right place. */
#include <memory.h>
#define bcmp(d1, d2, n) memcmp(d1, d2, n)
#define bcopy(d1, d2, n) memcpy(d2, d1, n)
/* Sys V does not have fsync. */
#define fsync(f) sync(); sync()
/* Stat does not have a st_blksize field. */
#define STATBLKSIZE 512
/* Does not have rename(). */
#define NEED_RENAME
/* Get string definitions. */
#include <string.h>
#define _HAVE_STRING
#endif
/* Sys V does not have a truncate call, how primitive. */
#define TRUNCATE(dbf) close( OPEN (dbf->name, O_RDWR|O_TRUNC, mode))
/* End of System V changes and defines. */
/**************************************************/
/* Alloca is builtin in gcc. Use the builtin alloca if compiled with gcc. */
#ifdef __GNUC__
#define BUILTIN_ALLOCA
#endif
/* Also, if this is a sun spark, use the builtin alloca. */
#ifdef sun
#ifdef sparc
#define BUILTIN_ALLOCA
#endif
#endif
/* Define the proper alloca procedure. */
#ifdef BUILTIN_ALLOCA
#define alloca(x) __builtin_alloca(x)
#else
extern char *alloca();
#endif
/* Malloc definition. */
extern char *malloc();
/* String definitions. */
#ifndef _HAVE_STRING
#include <strings.h>
#endif
/* The BSD defines are the default defines. If something is not
defined above in the above conditional code, it will be set
in the following code to the BSD code. */
/* Default block size. Some systems do not have blocksize in their
stat record. This code uses the BSD blocksize from stat. */
#ifndef STATBLKSIZE
#define STATBLKSIZE file_stat.st_blksize
#endif
/* Locking is done differently on different systems. Here is the BSD
locking routines. */
#ifndef UNLOCK_FILE
#define UNLOCK_FILE(dbf) flock(dbf->desc, LOCK_UN)
#define READLOCK_FILE(dbf) lock_val = flock(dbf->desc, LOCK_SH + LOCK_NB)
#define WRITELOCK_FILE(dbf) lock_val = flock(dbf->desc, LOCK_EX + LOCK_NB)
#endif
#ifndef TRUNCATE
#define TRUNCATE(dbf) ftruncate (dbf->desc, 0)
#endif
#ifndef OPEN
#define OPEN(a,b,c) open(a,b,c)
#endif